package com.learning.demos;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 公平锁 一个一个来 性能下降 顺序保证FIFO
 *
 * 非公平锁 上来就尝试占有锁，如果尝试失败则采用公平锁方式，特权线程能一直加塞，可能造成排队位置靠后的线程饥饿现象
 *
 * 可重入锁（又名递归锁）：同一线程外层函数获取锁之后，内层递归函数仍能获取该锁，即线程可以进入任何一个它已经拥有的锁所同步着的代码块；ReentrantLock  synchronized  防止死锁
 *
 * 独占锁 指该锁一次只能被一个线程所持有，对ReentrantLock和synchronized而言都是独占锁
 *
 * 共享锁 指该锁可被多个线程所持有，对ReentrantReadWriteLock其读锁是共享锁，其写锁是独占锁；读锁的共享锁可办证并发读是非常高效的，读写，写读，
 * 写写的过程都是互斥的(不能共存)。
 *
 * 自旋锁 是指尝试获取锁的线程不会立即阻塞，而是采用循环的方式尝试获取锁，这样的好处是减少线程上下文切换的消耗，缺点是循环会消耗cpu
 *
 */
public class LockTest {



    public static void main(String[] args) {

        // ReentrantLock，可重复锁，默认非公平锁，吞吐量比较大  synchronized也是非公平
        Lock lock = new ReentrantLock();
    }
}
